import pandas as pd

# 列显示不全，进行设置
pd.set_option('display.max_columns', 500)
pd.set_option('display.unicode.ambiguous_as_wide', True)
pd.set_option('display.unicode.east_asian_width', True)
pd.set_option('display.width', 180)  # 设置打印宽度(**重要**)

data = pd.read_csv(r'..\taobao\data\tianchi_mobile_recommend_train_user.csv')

# 预览前几行
# print(data.head())

# 统计多少行数据，多少列
# print(data.shape)

# 查看数据类型
# print(data.info())

# 默认统计数值型数据每列数据平均值，标准差，最大值，最小值，25%，50%，75%比例。
# print(data.describe(include=['O']))

# -------数据初步处理---------
# 删除重复值
# print(data.duplicated().sum())
data.drop_duplicates(inplace=True)

# 查看缺失值
# print(data.isnull().sum())
# 地理位置user_geohash缺失值近68%，没法进行处理，只能先删除，
# print(data.apply(lambda x: sum(x.isnull()) / len(x), axis=0))
# 删除地理位置user_geohash
data.drop(["user_geohash"], axis=1, inplace=True)

# 转换时间类型
data['time'] = pd.to_datetime(data['time'], format='%Y-%m-%d')
data["hour"] = data.time.dt.hour
data['time'] = data.time.dt.normalize()
print(data.dtypes)

# user_id item_id  为int类型，需要转化为object
for i in data.columns[0:2]:
    data[i] = data[i].astype('str')

# 按时间进行排序
data.sort_values(by=['time', 'hour'], inplace=True, )
# 重置索引，
data.reset_index(drop=True, inplace=True)
print(data.head())
print(data.dtypes)

data = data.rename(columns={
    'user_id': '用户名',
    'item_id': '商品名',
    'behavior_type': '行为',
    'item_category': '物品类名',
    'time': '日期',
    'hour': '小时'
})
print(data.head())
print(data.dtypes)
try:
    data.to_csv(r'..\taobao\data\taobao_1.csv', encoding="utf_8_sig")
except:
    pass
